dB−IBASIC インタープリタ&コンパイラ ――――――――――――――――――――――――――――――――――――――― I/O 1984年 4月号掲載 X1 インタープリタ マシン語 00000H−05BFFH S:00000H コンパイラ マシン語 0E000H−0F9FFH S:0E000H 起動方法 インタープリタ IPLから起動 コンパイラ CLEAR&HDFFF MON L J E000 ――――――――――――――――――――――――――――――――――――――― パソコン・テレビX1用「dB−コンパイラ」は、 すでにI/O誌で発表したX1および MZ−2200用「dB−BASIC」の基本思想に基づき開発したものです。 ゲーム、ホビー開発用に強化した、 整数型BASICのdB−IBASICプログラムを このdB−コンパイラで 簡単にマシン語にコンパイルすることが可能になりました。 コンパイルすると10数倍の高速処理をします。 オリジナル・ゲーム作りに大きな威力を発揮することでしょう。 なお、dB−BASICシリーズとして さらにこの言語思想を拡げていきたいと考えております。 dB−IBASICの特徴  ●インタープリタ、コンパイラが同居できるので、   開発効率が高くなっています。  ●フリーエリアはインタープリタのみで40Kバイト、   コンパイラと同居しているときで32Kバイトとなっています。  ●G−RAM上にオブジェクトを落とせるため、   オブジェクトも40Kバイト程度まで作れます。  ●REPEAT〜UNTIL、MPUT、MEM、INARYなどの   ゲーム用命令が強化されています。  ●プログラムは最適化されているので、   実行速度や効率が高くなっています。  ●コンパイラ自体マシン語で記述されているので、   コンパイル時間が短くなっています。 コンパイラの手順 ソース・プログラムはdB−IBASICのインタープリタ上で 充分にBUGを取ってください。 (1)コンパイラはdB−IBASIC上にロードするので、   dB−IBASICがX1に入っていない場合は、   まずdB−IBASICを起動してください。   次に、インタープリタ・レベル(dB−IBASICのコマンド待ち状態)で、   ・―――――――――――――――・   |  CLEAR&HDFFF  |   ・―――――――――――――――・   を実行してください、これで、dB−IBASICのエリアを制限し、   コンパイラをロードするエリアを確保します。 (2)LOADM、またはモニタ(MON)モードの   ロード・コマンドLでロードします。 (3)コンパイラの実行アドレスE000Hを呼び出して、   コンパイラを起動します。   dB−IBASICのインタープリタ・レベルでは、   CALL&HE000となります。   また、モニタ・モードの場合は、    (1)#J    (2)J−adr.:E000   と入力します。 (4)この入力を終えるとCRT画面に、   ・――――――――――――――――――――――――――・   | I−BASIC COMPILER Ver 1.0 |   | TAPE LOAD (Y or N)?      |   ・――――――――――――――――――――――――――・   と表示されます。   カセット・テープからソース・プログラムをロードするか、   メモリ上にあるソース・プログラムをそのまま使用するか決めてください。   テープからソース・プログラムをロードする場合は、   ソース・プログラムの入ったカセット・テープをセットしてから   [Y]を入力してください。   注1:テープからソース・プログラムをロードした場合、      メモリの4000H番地から格納されるので、      dB−IBASICのインタープリタ部(4000H〜5B00H)は破壊され、      以後dB−IBASICのインタープリタ・レベルには      戻れません、      すでにメイン・メモリ上にソース・プログラムがあり、      それをコンパイルする場合は、      テープからロードする必要がないので      [N]を入力してください。   注2:モニタ・モードからdB−IBASICのインタープリタ・レベルには、      Rコマンドで戻れます。      また、コンパイルしたオブジェクトがソース・プログラムに      重なっていない場合は、再びソース・プログラムを      dB−IBASICのインタープリタで編集することも可能です。      ただし、オブジェクト・プログラムを実行すると、      実行にともなってワーク・エリアが変わるので、      これによってdB−IBASIC、テキストなどが      破壊される場合があるので、充分に気をつけてください。 (5)次に、テープからロードしたソース・プログラム、   またはすでにメモリ上にあるソース・プログラムの範囲が   16進数の形式で表示されます。 (6)ここで次のように、ソース・プログラムをコンパイルして   オブジェクトに落とす番地(ADR.)を聞いてきます。   ・――――――――――――――――――――――――――――――・   | OBJ ADR.(>=4000H)? 0000      |   |                    |         |   |                    ・−−カーソル点滅 |   ・――――――――――――――――――――――――――――――・   設定可能番地は4000H以降です。   ソース・プログラムの範囲が小さく、   残りのメモリ・エリアにオブジェクトが入るならば、   ソース・プログラムの最終番地より後に設定してください。   このことによって、(4)で述べたように、   モニタ・モードからdB−IBASICのインタープリタに戻って   ソース・プログラムの再編集が可能となります。    注1:テープからソース・プログラムをロードせず、       メモリ上のソースをそのまま使う場合でも、       ソース・プログラムの範囲にオブジェクトの       先頭アドレスが重なった場合、       メイン・メモリ上でコンパイルを行なったり、       このように重なったオブジェクトを       メイン・メモリに読み込んだりすると、       重なった部分のソース・プログラムはなくなります。       この場合、dB−IBASICのインタープリタへ戻って       ソースプログラムの編集はできません。 (7)オブジェクトに落とす先頭アドレスを入力すると、CRT画面に   ・――――――――――――――――――――――・   | PORT SAVE (Y or N) ? |   ・――――――――――――――――――――――・   と表示されます。   コンパイルによってオブジェクトに落とす場所を指定します。   [Y]を入力すると、G−RAM上にコンパイルしたオブジェクトを   落とします(I/Oポートを経由してG−RAM上ににセーブする)。   [N]を入力すると、(6)で設定したメイン・メモリ上の   オブジェクトの先頭番地からオブジェクトがセーブされます。   ソース・プログラム領域と、オブジェクト領域が重なっていない場合のみ、   直接メイン・メモリにオブジェクトを落とせます。   重なっている場合は、G−RAMにセーブ(PORT SAVE)します。 (8)次のように、コンパイラのワーク先頭番地を聞いてきます。   ・――――――――――――――――――――――――――――――・   | WORK ADR.(<E000H) ?0000      |   |                    |         |   |                    ・−−カーソル点滅 |   ・――――――――――――――――――――――――――――――・   E000Hより小さい値で、ソース・プログラム領域、   またメイン・メモリにオブジェクトを落とす場合は、   さらにそのオブジェクト範囲に重ならない番地を指定します。   ソース・プログラムの大きさによって   オブジェクトの大きさも変わるので、一概にはいえませんが、   通常はD000〜DF00H位が適当でしょう。 (9)次に、   ・―――――――――――――――――――――――――――――――・   | LINE TABLE DISPLAY (Y or N) ? |   ・―――――――――――――――――――――――――――――――・   と聞いてきます。   ソースプログラムの行番号に対応するオブジェクトの番地を、   画面に表示する場合は[Y]を、   また表示しない場合は[N]を入力してください   (通常は[N]を入力してください)。   [Y]、または[N]を入力して[RETURN]キーを押すと、   コンパイルを開始し、    PASS−1    PASS−2   と表示されます(番地の表示を指定した場合は、   行番号とそれに対応する番地も表示されます)。   このとき、エラーが出た場合、   再度ソース・プログラムを見直してください。   例.$L,LIST,CLEARなど、これらはコンパイルできません。 (10)コンパイルが終了すると、オブジェクトの最終番地と変数の最終番地が、   次のように表示されます。   ・――――――――――――――――――――――――――――――・   | OBJ END ADR. = □□□□H……オブジェクト |   | VAR END ADR. = □□□□H……変数     |   ・――――――――――――――――――――――――――――――・ (11)オブジェクトをG−RAMに落とした場合、   さらに次のように聞いてきます。   ・―――――――――――――――――――――――・   | PORT LOAD (Y or N) ?  |   ・―――――――――――――――――――――――・   G−RAMに落としたオブジェクトを、   メイン・メモリにロ−ドする場合は[Y]を入力してください。   [N]を入力すると、メイン・メモリ内のソース・プログラムなどは   破壊されずそのまま残ります。 (12)コンパイルが終了し、各最終番地が表示されると   (あるいは、“PORT LOAD”と聞いてきたとき、    [Y]または[N]を入力後)、   モニタのコマンド待ちモードとなり、   プロンプト・シンボル“#”が表示されます。 (13)オブジェクトの実行は(6)で指定した番地にジャンプします。 dB−IBASICの命令、およびチェック・ポイント ●コマンド APPEND  メモリに格納されている行番号の最終値上り、  テープから追加する行番号の方が大きくなければなりません。  また、dB−BASICのMERGEでは、  ASCIIセーブされたプログラム・ファイルでしたが、  dB−IBASICのAPPENDでは普通にセーブした  プログラム・ファイルを使用します。 LIST/SAVE  LISTによるカセット・テープヘの出力はありません。  dB−IBASICでは、ASCII形式のセーブ機能はありません。  また、ASCII形式のプログラムのロード機能もありません。 RUN  コンパイルしたオブジェクト・プログラムでのこの実行は、  先頭アドレス、または指定参照先に対応するアドレスに飛ぶだけです。  変数の初期化などはインタープリタと違い行ないません。  変数の初期化が必要なときは、必ずCLR命令を使ってください。 ●特殊コマンド $L  初期値は15文字です。  したがって、文字例としては1変数に対して14文字までしか、扱えません。  それ以上使用したい場合は、  IBASICが起動した直後(コンパイルするときも、IBASICの起動時)に、  必ず$Lを実行して、  使用する文字列の文字数(最大255まで)を設定してください。 ●一般ステートメント CANCEL  dB−BASICのVer.1.2では、FOR〜NEXTの  スタック・アップ機能もありますが、  IBASICの場合、dB−BASIC Ver.1.0と同様、  サブルーチンの取り消し機能だけとなります。 CASE  条件にELSEは使えません。 CLEAR  dB−BASICのような文字領域の設定機能はありません。  dB−IBASICの場合、$Lで各文字列の長さを固定しています。  CLEARはdB−IBASICのインタープリンタのみで有効です。  コンパイルはできません。  変数の初期化のみを行なうときはCLRを使います。 DIM  2次元配列までで添字は0〜254の範囲です。 END  この命令をコンパイルし実行すると、ENDに対応する場所で  実行を停止してモニタ・モードとなります。  このとき、AF、BC、DE、HL、  A’F’、B’C’、D’E’、H’L’、  IX、IY、PC、SPの順に、  各レジスタ(ペア)の内容が表示されます。 FOR〜NEXT  dB−IBASICでは、STEPの増分において変数で指定できません。  必ず数値定数を使います。 GOTO/GOSUB/RESTOREなど  dB−IBASICでは、行番号、ラベルのみ参照します。  参照先に数値変数は使えません。 STOP  コンパイルして、この命令が実行されたときに、  [BREAK]キー([SHIFT]+[BREAK]、または  [CTRL]+[C])が押されていれば、  ENDと同じ動作を行ないます。  それ以外なら次の実行に移ります。 ●入出力ステートメント INPUT  入カフォーマッ卜指定などはできません。 OUT/POKE〔@〕  連続指定できません。  1度に1バイト・データ1個のみの出力となります。 PRINT#  PRINT#0のみです。 ●スクリーン・ステートメント BOX  アトリビュート指定かありません。  COLOR文などを併用して指定します。 CIRCLE  dB−BASICの比率の部分は、  dB−IBASICでは縦の半径となります  (第1番目の半径が横の半径となります)。 COLOR  バラメータを省略するとコンパイラでは機能しません。 LINE  dB−BASIC Ver.1.2ではタイリング・パターンが使えますが、  IBASICでは使えません。 PAINT  タイル・バターンのペイントはできません。 ●特殊ステートメント USR  dB−BASICとdB−IBASICでは、  レジスタBC,とHLの書式が違います。 WAIT  WAITの引数1に対し、1msec停止します。  なお、dB−BASICでは、引数1に対して、  0.1sec(=100msec)です。 ●一般関数 FRE  式はダミーで、テキストの空エリアを与えます。 POS  X,Y両方の座標を与えることができます。  dB−BASICのCSRLINの代用をPOS(1)で行ないます。 数値関数  小数点以下のでるものは、小数点以下を切り捨て整数部のみを与えます。 SIN/COS  度単位の値です。  また、何倍するかも指定します。 RND  0から(式の値)−1までの値の整数を与えます。 ●ストリング関数 CHR$  連続してコードをつなげません。  (例:CHR$(&H41,&H42,&H43,……)→できない)。